#include "Export.h"
#include "IDrawable.h"
#include "Color4.h"
#include "Glow.h"
#include <GL/gl.h>
namespace glow{

// le cube est un descendant de IDrawable , il doit donc implémenter la fonction draw
  
  class SHARED Cube : public IDrawable
  {
  private : 
    float _side;
    Color4f _color;
    /*Texture _texture;*/
    float _coord[3];
    bool _solidMode;
    float _vertices[24];
    unsigned char _index[24];
    
  public :
    Cube(float s=1.,Color4f c/*, Texture t*/, float co[3]={0,0,0} ,bool sld=false):_side(s),_color(c),/*_texture(t),*/_coord(co),_solidMode(sld){
      
      _vertices={
	_side*1.,_side*1.,_side*1., //avant haut droit 0
	_side*1.,_side*1.,-1, //avant bas droit 1
	_side*1.,-_side*1.,-_side*1.,
	_side*1.,-_side*1.,_side*1.,
	-_side*1.,_side*1.,_side*1.,//arriere haut droit 4
	-_side*1.,_side*1.,-_side*1., //arriere bas droit 5
	-_side*1.,-_side*1.,-_side*1.,
	-_side*1.,-_side*1.,_side*1
      };
      
      _index={
	// face avant
	0,1,2,3,
	// face arriere
	4,5,6,7,
	// face gauche
	3,2,6,7,
	// face droite
	0,1,5,4,
	// face haute
	0,3,7,4,
	//face basse
	1,2,6,5
      };
      
      
    }
    ~Cube(){}
    void draw(){
      glPushMatrix();
      glTranslatef(_coord[0],_coord[1],_coord[2]);
      glColor4f(_color.R,_color.G,_color.B,_color.A);
      glEnableClientState(GL_VERTEX_ARRAY);
      glVertexPointer(3, GL_FLOAT,0,_vertices);
      if(_solidMode)
	{
	  glDrawElement(GL_QUADS,24,GL_UNSIGNED_BYTES,_index);
	}
      else 
	{
	  glDrawElement(GL_LINE_LOOP,24,GL_UNSIGNED_BYTES,_index);
	}
      
      /* .... */
      
      glDisableClientState(GL_VERTEX_ARRAY);
      glPopMatrix();
    }
  };
}

